import { getToken, setToken, removeToken } from '@/utils/auth'
import { login, getUserInfo, getUserDetailById } from '@/api/user'

export default {
  // 开启命名空间
  namespaced: true,

  // user唯一存放数据的地方
  state: {
    token: getToken() || null,
    userInfo: {} // 定义一个用户状态(数据)
  },
  //  唯一修改state数据的地方
  mutations: {

    // 添加token
    setToken(state, newToken) {
      state.token = newToken
      setToken(newToken)
    },

    // 删除token
    removeToken(state) {
      state.token = null
      removeToken()
    },

    // 添加用户信息
    setUserInfo(state, userInfo) {
      state.userInfo = userInfo
    },

    // 删除用户信息
    removeUserInfo(state) {
      state.userInfo = {}
    }
  },
  //  异步请求代码,只能通过修改mutations来修改state数据
  actions: {
    // 退出登录后清空
    userLogout(context) {
      // 清空token
      context.commit('removeToken')
      // 清空用户信息
      context.commit('removeUserInfo')
    },

    // 获取用户信息
    async getUserInfo(context) {
      // 异步代码 同步显示获取用户信息
      const res = await getUserInfo()

      // 异步代码 通过id获取用户信息
      const detailInfo = await getUserDetailById(res.data.userId)
      // 两次数据合并成一个数组
      context.commit('setUserInfo', { ...res.data, ...detailInfo.data })
      // 返回动态路由的菜单栏
      return res.data.roles.menus
    },

    // 获取登录信息
    async userLogin(context, data) {
      const res = await login(data)
      // 把token值通过mutations方法 存到state中
      context.commit('setToken', res.data)
    }
  }
}
